home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / General / WASTE 1.0a4 Distribution / WASTE Source / Assembly / Utilities.c < prev    next >
Text File  |  1994-03-13  |  2KB  |  95 lines

  1. /*
  2.  *    Utilities.c
  3.  *
  4.  *    WASTE PROJECT
  5.  *    General purpose utility
  6.  *
  7.  *    Copyright (c) 1993-1994 Marco Piovanelli
  8.  *    All Rights Reserved
  9.  *
  10.  */
  11.  
  12. pascal Boolean _WEBlockCmp(void *block1, void *block2, long blockSize);
  13. pascal void _WEBlockClr(void *block, long blockSize);
  14. pascal void _WEForgetHandle(Handle *h);
  15. pascal Boolean _WESetHandleLock(Handle h, Boolean lock);
  16. pascal void _WEReorder(long *a, long *b);
  17.  
  18. pascal Boolean _WEBlockCmp(void *block1, void *block2, long blockSize)
  19. {
  20.     asm {
  21.         moveq #0, d0            ; assume function result is FALSE
  22.         movea.l block1, a0        ; 
  23.         movea.l block2, a1        ; 
  24.         move.l blockSize, d1    ; 
  25.         bra.s @1                ; 
  26.         
  27. @loop    cmpm.b (a0)+, (a1)+        ; 
  28.         bne.s @exit                ; drop out from loop if 2 bytes differ
  29. @1        subq.l #1, d1            ; 
  30.         bge.s @loop                ; 
  31.         
  32.         moveq #1, d0            ; set function result to TRUE
  33. @exit
  34.     }
  35. }
  36.  
  37. pascal void _WEBlockClr(void *block, long blockSize)
  38. {
  39.     asm {
  40.         movea.l block, a0        ; 
  41.         move.l blockSize, d0    ; 
  42.         bra.s @1                ; 
  43.         
  44. @loop    clr.b (a0)+                ; 
  45. @1        subq.l #1, d0            ; 
  46.         bge.s @loop                ; 
  47.     }
  48. }
  49.  
  50. pascal void _WEForgetHandle(Handle *h)
  51. {
  52.     asm {
  53.         movea.l h, a0            ; get ptr to VAR parameter
  54.         move.l (a0), d0            ; d0 = h
  55.         beq.s @1                ; if h = NIL then exit
  56.         clr.l (a0)                ; set VAR parameter to NIL
  57.         movea.l d0, a0            ; 
  58.         _DisposHandle            ; get rid of handle
  59. @1    }
  60. }
  61.  
  62. pascal Boolean _WESetHandleLock(Handle h, Boolean lock)
  63. {
  64.     asm {
  65.         movea.l h, a0            ; a0 = h
  66.         _HGetState                ; get state byte
  67.         btst #7, d0                ; test MSB (lock bit)
  68.         sne.b d1                ; 
  69.         neg.b d1                ; d1 = current lock
  70.         move.b lock, d0            ; d0 = required lock
  71.         cmp.b d0, d1            ; same lock?
  72.         beq.s @exit                ; if yes, do nothing
  73.         tst.b d0                ; 
  74.         beq.s @1                ; 
  75.         _HLock                    ; 
  76.         bra.s @exit                ; 
  77. @1        _HUnlock                ; 
  78. @exit    move.b d1, d0            ; 
  79.     }
  80. }
  81.  
  82. pascal void _WEReorder(long *a, long *b)
  83. {
  84.     asm {
  85.         movea.l a, a0
  86.         movea.l b, a1
  87.         move.l (a0), d0
  88.         move.l (a1), d1
  89.         cmp.l d0, d1
  90.         bge.s @exit
  91.         move.l d1, (a0)
  92.         move.l d0, (a1)
  93. @exit    
  94.     }
  95. }